<?php
namespace pay\fumin;

class RequestHandler {
    private $cfg;
    function __construct() {
        $this->cfg = new Config();
    }
    
    /**
    * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
    */
    function createSign($list) {
        ksort($list);
        $md5str = '';
        foreach ($list as $key => $val) {
            if(!empty($val)){
                $md5str = $md5str . $key . '=' . $val . '&';
            }
        }
        $sign = md5($md5str . 'key=' . $this->cfg->C('md5key'));
        return $sign;
    }
    
    /**
     * RSA(PKCS1)分段加密
     * 公匙加密  使用公匙对信息进行加密处理
     * @param unknown_type $sourcestr  待加密数据
     * @param unknown_type $publickey  RSA公匙（pem格式）
     * 加密成功返回加密字符串，失败返回 false
     */
    function rsaEncrypt($signature, $list) {
        $signPars = array();
        ksort($list);
        foreach ($list as $key => $val) {
            if(!empty($val)){
                $signPars[$key] = $val;
            }
        }
        $signPars['signature'] = $signature;
        ksort($signPars);
        $data = json_encode($signPars, true);

        // 分段长度为117位
        $split = str_split($data, 117);
        // 将rsa公匙转化为openssl公匙
//        $pubKey = file_get_contents("/home/cky/rsa_public_key.pem");
//        $publicKey = openssl_get_publickey($pubKey);
        $publicKey = $this->cfg->C('publicRSAKey');

        foreach ($split as $sourcestr) {
            $crypttext = '';
            $isOkay = openssl_public_encrypt($sourcestr, $crypttext, $publicKey, OPENSSL_PKCS1_PADDING);
            if(!$isOkay){
                return false;
            }
            $encodeDataArr[] = $crypttext;
            
        }
        $encodeDataStr = base64_encode(implode('',$encodeDataArr));
        return $encodeDataStr;
    }
    
    function rsaEncryptTest() {
        $publicKey = file_get_contents("/home/cky/rsa_public_key.pem");
        $puKey = openssl_get_publickey($publicKey);
        // 加密数据
        $dataArr = array(
            'id' => '1234567890',
            'name' => '小明',
            'mobile' => '123456',
        );
        $data = json_encode($dataArr);
        $encrypted = '';
        openssl_public_encrypt($data, $encrypted, $puKey);//公钥加密
        $result = base64_encode($encrypted);// base64传输
        return json_encode($result, true);
    }
    

    /**
     * 使用post的传输
     */
    function curl($url, $data) {
        // 启动一个CURL会话
        $ch = curl_init();
        // 设置curl允许执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, 120);
        // 忽略证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 获取的信息以文件流的形式返回，而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        // 发送一个常规的POST请求。
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HEADER, 0); // 是否需要头部信息（否）
        // 执行操作
        $result = curl_exec($ch);
        if($result) {
            curl_close($ch);
            // 将返回json转换为数组
            $arrResult = json_decode($result, true);
//            if(!is_array($arrResult)) {
//                $arrResult['errcode']=1;
//                $arrResult['msg']='服务器繁忙，请稍候重试';
//            }
        } else {
            $arrResult = curl_error($ch);
            curl_close($ch);
//            $arrResult['errcode']=1;
//            $arrResult['msg']='服务器繁忙，请稍候重试';
        }
        // 返回数据
        return $arrResult;
    }
}

